// API 使用示例文件
import { request } from '@/utils/request'
import type { BaseResponse } from '@/types/request'

// ===== 用户相关接口示例 =====

// 用户信息接口
interface UserInfo {
  id: number
  username: string
  email: string
  avatar?: string
}

// 登录接口
interface LoginParams {
  username: string
  password: string
}

interface LoginResponse {
  token: string
  userInfo: UserInfo
}

// 用户列表
interface UserListResponse {
  list: UserInfo[]
  total: number
  page: number
  pageSize: number
}

// ===== API 调用示例 =====

export class UserAPI {
  // GET 请求示例 - 获取用户信息
  static async getUserInfo(id: number): Promise<BaseResponse<UserInfo>> {
    return request.get<UserInfo>(`/api/user/${id}`)
  }

  // POST 请求示例 - 用户登录
  static async login(params: LoginParams): Promise<BaseResponse<LoginResponse>> {
    return request.post<LoginResponse>('/api/auth/login', params)
  }

  // GET 请求带参数示例 - 获取用户列表
  static async getUserList(params: {
    page?: number
    pageSize?: number
    keyword?: string
  }): Promise<BaseResponse<UserListResponse>> {
    return request.get<UserListResponse>('/api/user/list', {
      params
    })
  }

  // POST 请求示例 - 创建用户
  static async createUser(userData: Omit<UserInfo, 'id'>): Promise<BaseResponse<UserInfo>> {
    return request.post<UserInfo>('/api/user', userData)
  }

  // 文件上传示例 - 单文件上传
  static async uploadAvatar(file: File, userId: number): Promise<BaseResponse<{ url: string }>> {
    return request.upload<{ url: string }>(
      '/api/user/avatar',
      file,
      { userId }, // 额外的表单数据
      { timeout: 60000 }, // 60秒超时
      { fieldName: 'avatar' } // 文件字段名
    )
  }

  // 文件上传示例 - 多文件上传
  static async uploadImages(files: File[]): Promise<BaseResponse<{ urls: string[] }>> {
    return request.upload<{ urls: string[] }>(
      '/api/user/images',
      files,
      undefined, // 无额外表单数据
      { timeout: 120000 }, // 2分钟超时
      { 
        fieldName: 'images',
        multipleField: true // 使用多个字段名
      }
    )
  }

  // Excel上传示例
  static async uploadExcel(files: File[]): Promise<BaseResponse<{ message: string }>> {
    return request.uploadExcel<{ message: string }>(
      '/api/user/import-excel',
      files,
      { description: '用户数据导入' } // 额外数据
    )
  }
}

// ===== 产品相关接口示例 =====

interface Product {
  id: number
  name: string
  price: number
  description: string
  images: string[]
}

interface ProductListParams {
  page?: number
  size?: number
  category?: string
  minPrice?: number
  maxPrice?: number
}

export class ProductAPI {
  // 获取产品列表
  static async getProductList(params: ProductListParams): Promise<BaseResponse<{
    items: Product[]
    total: number
  }>> {
    return request.get('/api/products', { params })
  }

  // 获取产品详情
  static async getProductDetail(id: number): Promise<BaseResponse<Product>> {
    return request.get<Product>(`/api/products/${id}`)
  }

  // 创建产品
  static async createProduct(product: Omit<Product, 'id'>): Promise<BaseResponse<Product>> {
    return request.post<Product>('/api/products', product)
  }

  // 更新产品
  static async updateProduct(id: number, product: Partial<Product>): Promise<BaseResponse<Product>> {
    return request.post<Product>(`/api/products/${id}`, product)
  }

  // 批量上传产品图片
  static async uploadProductImages(
    productId: number, 
    files: File[]
  ): Promise<BaseResponse<{ urls: string[] }>> {
    return request.upload(
      '/api/products/images',
      files,
      { productId },
      { timeout: 180000 }, // 3分钟超时
      { fieldName: 'productImages' }
    )
  }
}

// ===== 使用示例 =====

/*
// 在 Vue 组件中使用
import { UserAPI, ProductAPI } from '@/utils/api-examples'

export default {
  async mounted() {
    try {
      // 获取用户信息
      const userRes = await UserAPI.getUserInfo(1)
      if (userRes.code === 200) {
        console.log('用户信息:', userRes.data)
      }

      // 获取产品列表
      const productRes = await ProductAPI.getProductList({
        page: 1,
        size: 10,
        category: 'electronics'
      })
      if (productRes.code === 200) {
        console.log('产品列表:', productRes.data.items)
      }

      // 文件上传
      const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement
      if (fileInput?.files?.[0]) {
        const uploadRes = await UserAPI.uploadAvatar(fileInput.files[0], 1)
        if (uploadRes.code === 200) {
          console.log('上传成功:', uploadRes.data.url)
        }
      }

    } catch (error) {
      console.error('API调用失败:', error)
    }
  }
}
*/

// ===== 错误处理示例 =====

export async function apiCallWithErrorHandling() {
  try {
    const response = await UserAPI.getUserInfo(1)
    
    if (response.code === 200) {
      console.log('请求成功:', response.data)
      return response.data
    } else {
      console.warn('业务逻辑错误:', response.message || response.msg)
      throw new Error(response.message || response.msg || '业务逻辑错误')
    }
  } catch (error) {
    console.error('网络或系统错误:', error)
    throw error
  }
}

// ===== 环境变量配置说明 =====

/*
在 .env 文件中配置：

# 开发环境
VITE_APP_BASE_API=http://localhost:3000/api

# 生产环境
VITE_APP_BASE_API=https://api.yourdomain.com

如果不设置 VITE_APP_BASE_API，将使用默认的 '/dragon' 作为 baseURL
*/ 